﻿using System;
using System.Data;
using SiGeCoPre.Presupuesto_DAO;
using SiGeCoPre.Presupuesto_DTO;
using SiGeCoPre.Presupuesto_Entities;
using SiGeCoPre.Presupuesto_Factory;
using SiGeCoPre.Presupuesto_Excepcion;
using SiGeCoPre.Presupuesto_Util;

namespace SiGeCoPre.Presupuesto_BLIMPL
{
    /// <summary>
    /// Clase que implementa BLRepuestos
    /// </summary>
    class BLIMPLRepuestos:Presupuesto_BL.BLRepuestos
    {
        DAORepuestos createRepuesto = DAOFactoryPresupuesto.createRepuesto();

        /// <summary>
        /// Guarda un repuesto
        /// </summary>
        /// <param name="r">Objeto con los datos del repuesto a guardar</param>
        /// <returns>Devuelte true si fue ingresado correctamente o false si falló</returns>
        public bool saveRepuesto(repuestosDTO r)
        {
            Boolean correcto = false;
            try
            {
                Boolean insertado = createRepuesto.saveRepuesto(r.Descripcion, r.Codigo, r.Precio, r.Activo);

                if (insertado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Modifica un repuesto
        /// </summary>
        /// <param name="r">Objeto con los datos del repuesto a modificar</param>
        /// <param name="codigo">Determina que repuesto va a ser modificado</param>
        /// <returns>Devuelve true si fue modificado correctamente o false si falló</returns>
        public bool updateRepuesto(repuestosDTO r, string codigo)
        {
            Boolean correcto = false;

            try
            {
                repuestos rep = createRepuesto.getRepuesto(codigo);

                if (null != rep)
                {
                    Boolean modificado = createRepuesto.updateRepuesto(r.Descripcion, r.Codigo, r.Precio, r.Activo, rep.ID);

                    if (modificado)
                    {
                        correcto = true;        
                    }
                }
                
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Elimina un repuesto
        /// </summary>
        /// <param name="codigo">Determina el repuesto a eliminar</param>
        /// <returns>Devuelve true si fue eliminado correctamten o false si falló</returns>
        public bool deleteRepuesto(string codigo)
        {
            Boolean correcto = false;

            try
            {
                Boolean eliminado = createRepuesto.deleteRepuesto(codigo);

                if (eliminado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Lista todos los repuestos
        /// </summary>
        /// <returns>Devuelve una tabla con todo los repuestos</returns>
        public DataTable getAllRepuestos()
        {
            DataTable listadoRepuestos = null;

            try
            {
                DataTable repuestos = createRepuesto.getAllRepuestos();

                if (null != repuestos)
                {
                    listadoRepuestos = repuestos;
                }
                
            }
            catch (Exception ex)
            {

                listadoRepuestos = null;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return listadoRepuestos;
        }

        /// <summary>
        /// Obtiene un repuesto
        /// </summary>
        /// <param name="codigo">Determina el repuesto a obtener</param>
        /// <returns>Devuelve un objeto repuesto</returns>
        public repuestosDTO getRepuesto(string codigo)
        {
            repuestosDTO repuesto = null;

            try
            {
                repuestos rep = createRepuesto.getRepuesto(codigo);

                if (null != rep)
                {
                    repuesto = new repuestosDTO();
                    repuesto.ID = rep.ID;
                    repuesto.Activo = rep.Activo;
                    repuesto.Codigo = rep.Codigo;
                    repuesto.Precio = rep.Precio;
                    repuesto.Descripcion = rep.Descripcion;
                }
               

            }
            catch (Exception ex)
            {

                repuesto = null;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return repuesto;
        }
    }
}
